package br.com.jvet.persistencia;

import java.util.Date;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.Query;

import br.com.jvet.constante.StatusMovimentacao;
import br.com.jvet.constante.StatusPedido;
import br.com.jvet.entidade.ItemPedidoCompra;
import br.com.jvet.entidade.Movimentacao;
import br.com.jvet.entidade.PedidoCompra;
import br.com.jvet.mb.LoginMB;

@Stateless
public class ItemPedidoCompraDAO extends AbstractDAO<ItemPedidoCompra, Integer> {

	public ItemPedidoCompraDAO() {
		super(ItemPedidoCompra.class);
	}

	@EJB
	private PedidoCompraDAO pedidoCompraDAO;
	@EJB
	private MovimentacaoDAO movimentacaoDAO;

	@SuppressWarnings("unchecked")
	public List<ItemPedidoCompra> buscarItensRecebimento(StatusPedido status) {

		Query c = super.getEntityManager().createQuery(
				"SELECT s FROM " + ItemPedidoCompra.class.getSimpleName()
						+ " s " + " where not s.status =:st");
		c.setParameter("st", status);

		return (List<ItemPedidoCompra>) c.getResultList();
	}

	private Movimentacao montarMovimentacao(ItemPedidoCompra item) {
		Movimentacao mov = new Movimentacao();
		mov.setData(new Date());
		mov.setHora(new Date());
		mov.setUsuario(LoginMB.getUsuarioCorrente());
		mov.setMotivo("Recebimento de item de pedido");
		mov.setPreco(item.getPreco() + (item.getPreco() * item.getIpi()));
		mov.setProduto(item.getProduto());
		mov.setQuantidade(item.getQtdRecebida());
		mov.setStatus(StatusMovimentacao.ENTRADA);

		return mov;

	}

	public void updateQtd(ItemPedidoCompra item) {

		// Query c = super.getEntityManager().createQuery(UPDATE_MOVIMENTACAO);
		// c.setParameter("qtd", produto.getQtdRecebida());
		// c.setParameter("codigo", produto.getCodigo());
		Movimentacao mov = this.montarMovimentacao(item);
		item.getMovimentacoes().add(mov);
		// movimentacaoDAO.incluir(mov);
		// Query q = super.getEntityManager().createQuery(UPDATE_ITEM);
		// q.setParameter("status", item.getStatus());
		// q.setParameter("data", item.getDataRecebimento());
		// q.setParameter("codigo", item.getCodigo());
		// //c.executeUpdate();
		// q.executeUpdate();
		super.getEntityManager().merge(item);
		movimentacaoDAO.updateQtdMovimentacao(item.getProduto(), mov);
		int totalRecebido = 0;
		int totalItens = 0;
		List<ItemPedidoCompra> lista = pedidoCompraDAO.consultarItens(item
				.getPedidoCompra());
		for (ItemPedidoCompra itemPed : lista) {
			totalItens += 1;
			if (itemPed.getStatus() == StatusPedido.RECEBIDO) {
				totalRecebido += 1;
			}
		}
		PedidoCompra pedido = item.getPedidoCompra().clone();
		pedido.setItensPedido(lista);
		if (totalRecebido > 0 && totalRecebido == totalItens) {

			pedido.setStatus(StatusPedido.RECEBIDO);
			pedidoCompraDAO.alterar(pedido);
		} else {
			pedido.setStatus(StatusPedido.PARCIAL);
			pedidoCompraDAO.alterar(pedido);
		}
		super.getEntityManager().flush();

	}

}
